🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / settings / src / androidMain / kotlin / org / meshtastic / feature / settings / component / AppInfoSection.kt
Displaying Raw • Download
feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/component/AppInfoSection.kt f4506450168d047b225b277620bf0f1d5dcd13b5 (f4506450) Text, 6.31 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.settings.component
Tff7b72import T7ee787android.content.Intent
Tff7b72import T7ee787android.net.Uri
Tff7b72import T7ee787android.provider.Settings
Tff7b72import T7ee787androidx.activity.compose.rememberLauncherForActivityResult
Tff7b72import T7ee787androidx.activity.result.contract.ActivityResultContracts
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.LaunchedEffect
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.mutableIntStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.rememberCoroutineScope
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.platform.LocalContext
Tff7b72import T7ee787androidx.compose.ui.tooling.preview.Preview
Tff7b72import T7ee787kotlinx.coroutines.delay
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.acknowledgements
Tff7b72import T7ee787org.meshtastic.core.resources.app_notifications
Tff7b72import T7ee787org.meshtastic.core.resources.app_version
Tff7b72import T7ee787org.meshtastic.core.resources.info
Tff7b72import T7ee787org.meshtastic.core.resources.intro_show
Tff7b72import T7ee787org.meshtastic.core.resources.modules_already_unlocked
Tff7b72import T7ee787org.meshtastic.core.resources.modules_unlocked
Tff7b72import T7ee787org.meshtastic.core.resources.system_settings
Tff7b72import T7ee787org.meshtastic.core.ui.component.ListItem
Tff7b72import T7ee787org.meshtastic.core.ui.icon.AppSettingsAlt
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ChevronRight
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Info
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Memory
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Notifications
Tff7b72import T7ee787org.meshtastic.core.ui.icon.WavingHand
Tff7b72import T7ee787org.meshtastic.core.ui.theme.AppTheme
Tff7b72import T7ee787org.meshtastic.core.ui.util.showToast
Tff7b72import T7ee787kotlin.time.Duration.Companion.seconds
T8b949e/** Section displaying application information and related actions. */
Tf0883e@Composable
Tff7b72fun Td2a8ffAppInfoSectionTb4b4b4(
Te6edf3appVersionNameTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3hiddenFeaturesUnlockedTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onUnlockHiddenFeaturesTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onShowAppIntroTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToAboutTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3context Tff7b72= Te6edf3LocalContextTb4b4b4.Te6edf3current
Tff7b72val Te6edf3settingsLauncher Tff7b72=
Te6edf3rememberLauncherForActivityResultTb4b4b4(Te6edf3contract Tff7b72= Te6edf3ActivityResultContractsTb4b4b4.Te6edf3StartActivityForResultTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{Tb4b4b4}
Te6edf3ExpressiveSectionTb4b4b4(Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3infoTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ListItemTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3intro_showTb4b4b4)Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3WavingHandTb4b4b4,
Te6edf3trailingIcon Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3onShowAppIntroTb4b4b4(Tb4b4b4)
Tb4b4b4}
Te6edf3ListItemTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3app_notificationsTb4b4b4)Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3NotificationsTb4b4b4,
Te6edf3trailingIcon Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3intent Tff7b72=
Te6edf3IntentTb4b4b4(Te6edf3SettingsTb4b4b4.Te6edf3ACTION_APP_NOTIFICATION_SETTINGSTb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3putExtraTb4b4b4(Te6edf3SettingsTb4b4b4.Te6edf3EXTRA_APP_PACKAGETb4b4b4, Te6edf3contextTb4b4b4.Te6edf3packageNameTb4b4b4)
Tb4b4b4}
Te6edf3settingsLauncherTb4b4b4.Te6edf3launchTb4b4b4(Te6edf3intentTb4b4b4)
Tb4b4b4}
Te6edf3ListItemTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3system_settingsTb4b4b4)Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3AppSettingsAltTb4b4b4,
Te6edf3trailingIcon Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3intent Tff7b72= Te6edf3IntentTb4b4b4(Te6edf3SettingsTb4b4b4.Te6edf3ACTION_APPLICATION_DETAILS_SETTINGSTb4b4b4)
Te6edf3intentTb4b4b4.Te6edf3data Tff7b72= Te6edf3UriTb4b4b4.Te6edf3fromPartsTb4b4b4(Ta5d6ff"Ta5d6ffpackageTa5d6ff"Tb4b4b4, Te6edf3contextTb4b4b4.Te6edf3packageNameTb4b4b4, Tff7b72nullTb4b4b4)
Te6edf3settingsLauncherTb4b4b4.Te6edf3launchTb4b4b4(Te6edf3intentTb4b4b4)
Tb4b4b4}
Te6edf3ListItemTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3acknowledgementsTb4b4b4)Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3InfoTb4b4b4,
Te6edf3trailingIcon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ChevronRightTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3onNavigateToAboutTb4b4b4(Tb4b4b4)
Tb4b4b4}
Te6edf3AppVersionButtonTb4b4b4(
Te6edf3hiddenFeaturesUnlocked Tff7b72= Te6edf3hiddenFeaturesUnlockedTb4b4b4,
Te6edf3appVersionName Tff7b72= Te6edf3appVersionNameTb4b4b4,
Te6edf3onUnlockHiddenFeatures Tff7b72= Te6edf3onUnlockHiddenFeaturesTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tff7b72const Tff7b72val Te6edf3UNLOCK_CLICK_COUNT Tff7b72= T79c0ff5 T8b949e// Number of clicks required to unlock excluded modules.
Tff7b72private Tff7b72const Tff7b72val Te6edf3UNLOCKED_CLICK_COUNT Tff7b72= T79c0ff3 T8b949e// Number of clicks before we toast that modules are already unlocked.
Tff7b72private Tff7b72const Tff7b72val Te6edf3UNLOCK_TIMEOUT_SECONDS Tff7b72= T79c0ff1 T8b949e// Timeout in seconds to reset the click counter.
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffAppVersionButtonTb4b4b4(
Te6edf3hiddenFeaturesUnlockedTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3appVersionNameTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3onUnlockHiddenFeaturesTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3scope Tff7b72= Te6edf3rememberCoroutineScopeTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3context Tff7b72= Te6edf3LocalContextTb4b4b4.Te6edf3current
Tff7b72var Te6edf3clickCount Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableIntStateOfTb4b4b4(T79c0ff0Tb4b4b4) Tb4b4b4}
Te6edf3LaunchedEffectTb4b4b4(Te6edf3clickCountTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3clickCount Tff7b72in T79c0ff1.Tb4b4b4.Tff7b72<Te6edf3UNLOCK_CLICK_COUNTTb4b4b4) Tb4b4b4{
Te6edf3delayTb4b4b4(Te6edf3UNLOCK_TIMEOUT_SECONDSTb4b4b4.Te6edf3secondsTb4b4b4)
Te6edf3clickCount Tff7b72= T79c0ff0
Tb4b4b4}
Tb4b4b4}
Te6edf3ListItemTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3app_versionTb4b4b4)Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3MemoryTb4b4b4,
Te6edf3supportingText Tff7b72= Te6edf3appVersionNameTb4b4b4,
Te6edf3trailingIcon Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3clickCount Tff7b72= Te6edf3clickCountTb4b4b4.Te6edf3incTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3coerceInTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3UNLOCK_CLICK_COUNTTb4b4b4)
Tff7b72when Tb4b4b4{
Te6edf3clickCount Tff7b72=Tff7b72= Te6edf3UNLOCKED_CLICK_COUNT Tff7b72&Tff7b72& Te6edf3hiddenFeaturesUnlocked Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3clickCount Tff7b72= T79c0ff0
Te6edf3scopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3contextTb4b4b4.Te6edf3showToastTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3modules_already_unlockedTb4b4b4) Tb4b4b4}
Tb4b4b4}
Te6edf3clickCount Tff7b72=Tff7b72= Te6edf3UNLOCK_CLICK_COUNT Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3clickCount Tff7b72= T79c0ff0
Te6edf3onUnlockHiddenFeaturesTb4b4b4(Tb4b4b4)
Te6edf3scopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3contextTb4b4b4.Te6edf3showToastTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3modules_unlockedTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@PreviewTb4b4b4(Te6edf3showBackground Tff7b72= Tff7b72trueTb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffAppInfoSectionPreviewTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3AppTheme Tb4b4b4{
Te6edf3AppInfoSectionTb4b4b4(
Te6edf3appVersionName Tff7b72= Ta5d6ff"Ta5d6ff2.5.0Ta5d6ff"Tb4b4b4,
Te6edf3hiddenFeaturesUnlocked Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3onUnlockHiddenFeatures Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onShowAppIntro Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onNavigateToAbout Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.06s